package top.malaoshi;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.yingqi.User;
import com.yingqi.IUserMapper;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Main {
        @Test
        public void test() throws IOException {
        /*
         1. 读取全局配置文件.
            getResourceAsStream 使用的资源路径
         */
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 3. 通过 sqlSession 工厂打开一个 sqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                //4 使用SqlSession创建Dao接口的代理对象
                IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
                List<User> list = mapper.selectAll();
                for (User user : list) {
                    String info = String.format("id：%s,用户名：%s,密码：%s", user.getId(), user.getUsername(), user.getPassword());
                    System.out.println(info);
                }
            } finally {
                sqlSession.close();
            }
        }
    @Test
    public void save() throws IOException {
        /*
         1. 读取全局配置文件.
            getResourceAsStream 使用的资源路径
         */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            //4 使用SqlSession创建Dao接口的代理对象
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user=new User();
            user.setId("1004");
            user.setUsername("张先生");
            user.setPassword("123456");
            user.setAge(20);
            user.setSex("0");
            user.setStatus("1");
            int num=mapper.save(user);
            sqlSession.commit();//全部正常执行时，提交事务
            System.out.println("更新了"+num+"条记录");
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }
        finally {
            sqlSession.close();
        }
    }
    @Test
    public void update() throws IOException {
        /*
         1. 读取全局配置文件.
            getResourceAsStream 使用的资源路径
         */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            //4 使用SqlSession创建Dao接口的代理对象
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user=new User();
            user.setId("1000");
            user.setUsername("admin");
            user.setPassword("123456");
            int num=mapper.updateById(user);
            sqlSession.commit();//全部正常执行时，提交事务
            System.out.println("更新了"+num+"条记录");
        }catch (Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            sqlSession.close();
        }
    }
    @Test
    public void testDelete() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        int num = mapper.deleteById("1000");
        System.out.println("删除 " + num + " 条记录");
        //提交事务
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectById() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        User user=mapper.selectById("10001");
        String info= String.format("id：%s,用户名：%s,密码：%s",user.getId(),user.getUsername(),user.getPassword() );
        System.out.println(info);
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectByName() throws IOException {
/*
 1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
    getResourceAsStream 使用的资源路径
 */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        List<User> list=mapper.selectByUsername("%李%");
        for(User user:list) {
            String info = String.format("id：%s,用户名：%s,密码：%s", user.getId(), user.getUsername(), user.getPassword());
            System.out.println(info);
        }
        sqlSession.close();
        inputStream.close();
    }
    @Test
    public void testSelectCount() throws IOException {
/*
 1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
    getResourceAsStream 使用的资源路径
 */
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 使用sqlSession的工厂构造器来读入全局配置，再生成一个sqlSession工厂.
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 通过 sqlSession 工厂打开一个 sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4 使用SqlSession创建Dao接口的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        int count=mapper.selectCount();
        System.out.println("总共记录数："+count);
        sqlSession.close();
        inputStream.close();
    }
}

